package com.yida.system.service.impl;

import java.util.List;
import java.util.stream.Collectors;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.yida.common.core.exception.ServiceException;
import com.yida.common.core.utils.DateUtils;
import com.yida.system.api.domain.SysDataPutInInterfaceConfig;
import com.yida.system.api.enums.SysDataPutInConfigEnum;
import com.yida.system.domain.request.SysDataPutInConfigEditRequest;
import com.yida.system.domain.request.SysDataPutInConfigSaveRequest;
import com.yida.system.mapper.SysDataPutInInterfaceConfigMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yida.system.mapper.SysDataPutInConfigMapper;
import com.yida.system.api.domain.SysDataPutInConfig;
import com.yida.system.service.ISysDataPutInConfigService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 系统数据接入配置Service业务层处理
 *
 * @author ruoyi
 * @date 2023-04-04
 */
@Service
public class SysDataPutInConfigServiceImpl implements ISysDataPutInConfigService {
    @Autowired
    private SysDataPutInConfigMapper sysDataPutInConfigMapper;

    @Autowired
    private SysDataPutInInterfaceConfigMapper sysPutInInterfaceConfigMapper;

    /**
     * 查询系统数据接入配置
     *
     * @param id 系统数据接入配置主键
     * @return 系统数据接入配置
     */
    @Override
    public SysDataPutInConfig selectSysDataPutInConfigById(Long id) {
        return sysDataPutInConfigMapper.selectSysDataPutInConfigById(id);
    }

    /**
     * 查询系统数据接入配置列表
     *
     * @param sysDataPutInConfig 系统数据接入配置
     * @return 系统数据接入配置
     */
    @Override
    public List<SysDataPutInConfig> selectSysDataPutInConfigList(SysDataPutInConfig sysDataPutInConfig) {
        return sysDataPutInConfigMapper.selectSysDataPutInConfigList(sysDataPutInConfig);
    }

    /**
     * 新增系统数据接入配置
     *
     * @param saveRequest 系统数据接入配置
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int insertSysDataPutInConfig(SysDataPutInConfigSaveRequest saveRequest) {
        // 判断是否存在配置键
        if (!SysDataPutInConfigEnum.getTypeList().contains(saveRequest.getConfigKey())) {
            throw new ServiceException("未查询到配置键");
        }
        // 判断配置键是否已存在数据
        SysDataPutInConfig sysDataPutInConfig = new SysDataPutInConfig();
        sysDataPutInConfig.setConfigKey(saveRequest.getConfigKey());
        if (ObjectUtil.isNotEmpty(sysDataPutInConfigMapper.selectSysDataPutInConfigList(sysDataPutInConfig))) {
            throw new ServiceException("当前配置键已存在请勿重复添加");
        }
        // 拷贝参数
        SysDataPutInConfig saveResult = new SysDataPutInConfig();
        BeanUtil.copyProperties(saveRequest, saveResult);
        saveResult.setCreateTime(DateUtils.getNowDate());
        return sysDataPutInConfigMapper.insertSysDataPutInConfig(saveResult);
    }

    /**
     * 修改系统数据接入配置
     *
     * @param editRequest 系统数据接入配置
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int updateSysDataPutInConfig(SysDataPutInConfigEditRequest editRequest) {
        // 判断是否存在系统数据接入接口配置
        SysDataPutInInterfaceConfig sysDataPutInInterfaceConfig = new SysDataPutInInterfaceConfig();
        sysDataPutInInterfaceConfig.setSysDataPutInId(editRequest.getId());
        List<SysDataPutInInterfaceConfig> sysDataPutInInterfaceConfigList = sysPutInInterfaceConfigMapper.selectSysDataPutInInterfaceConfigList(sysDataPutInInterfaceConfig);
        if(ObjectUtil.isNotEmpty(sysDataPutInInterfaceConfigList)){
            throw new ServiceException("当前系统数据接入配置信息已配置接口配置，请删除接口配置后再进行修改");
        }
        // 判断系统数据接入配置是否存在
        SysDataPutInConfig sysDataPutInConfig = sysDataPutInConfigMapper.selectSysDataPutInConfigById(editRequest.getId());
        if (ObjectUtil.isEmpty(sysDataPutInConfig)) {
            throw new ServiceException("未查询到对应系统数据接入配置信息");
        }
        // 判断数据是否修改
        if (!sysDataPutInConfig.getConfigKey().equals(editRequest.getConfigKey())) {
            // 判断是否存在配置键
            if (!SysDataPutInConfigEnum.getTypeList().contains(editRequest.getConfigKey())) {
                throw new ServiceException("未查询到配置键");
            }
            // 判断配置键是否已存在数据
            SysDataPutInConfig dataPutInConfig = new SysDataPutInConfig();
            dataPutInConfig.setConfigKey(editRequest.getConfigKey());
            if (ObjectUtil.isNotEmpty(sysDataPutInConfigMapper.selectSysDataPutInConfigList(dataPutInConfig)
                    .stream()
                    .filter(item -> !editRequest.getId().equals(item.getId()))
                    .collect(Collectors.toList()))) {
                throw new ServiceException("当前配置键已存在请勿重复添加");
            }
        }
        // 拷贝参数
        BeanUtil.copyProperties(editRequest, sysDataPutInConfig);
        sysDataPutInConfig.setUpdateTime(DateUtils.getNowDate());
        return sysDataPutInConfigMapper.updateSysDataPutInConfig(sysDataPutInConfig);
    }

    /**
     * 批量删除系统数据接入配置
     *
     * @param ids 需要删除的系统数据接入配置主键
     * @return 结果
     */
    @Override
    public int deleteSysDataPutInConfigByIds(Long[] ids) {
        for (Long id : ids) {
            // 判断是否存在系统数据接入接口配置
            SysDataPutInInterfaceConfig sysDataPutInInterfaceConfig = new SysDataPutInInterfaceConfig();
            sysDataPutInInterfaceConfig.setSysDataPutInId(id);
            List<SysDataPutInInterfaceConfig> sysDataPutInInterfaceConfigList = sysPutInInterfaceConfigMapper.selectSysDataPutInInterfaceConfigList(sysDataPutInInterfaceConfig);
            if(ObjectUtil.isNotEmpty(sysDataPutInInterfaceConfigList)){
                throw new ServiceException("当前系统数据接入配置信息已配置接口配置，请删除接口配置后再进行修改");
            }
        }
        return sysDataPutInConfigMapper.deleteSysDataPutInConfigByIds(ids);
    }

    /**
     * 删除系统数据接入配置信息
     *
     * @param id 系统数据接入配置主键
     * @return 结果
     */
    @Override
    public int deleteSysDataPutInConfigById(Long id) {
        // 判断是否存在系统数据接入接口配置
        SysDataPutInInterfaceConfig sysDataPutInInterfaceConfig = new SysDataPutInInterfaceConfig();
        sysDataPutInInterfaceConfig.setSysDataPutInId(id);
        List<SysDataPutInInterfaceConfig> sysDataPutInInterfaceConfigList = sysPutInInterfaceConfigMapper.selectSysDataPutInInterfaceConfigList(sysDataPutInInterfaceConfig);
        if(ObjectUtil.isNotEmpty(sysDataPutInInterfaceConfigList)){
            throw new ServiceException("当前系统数据接入配置信息已配置接口配置，请删除接口配置后再进行修改");
        }
        return sysDataPutInConfigMapper.deleteSysDataPutInConfigById(id);
    }
}
